Lệnh su và lệnh su - trong Linux khác nhau như thế nào?
# su - <username> # su <username>
Có thể hiểu đơn giản về lệnh "su" như sau:
Chương trình lệnh “su” giúp chúng ta chạy 1 shell mới bằng cách chuyển đổi session shell mới sang user ID và group ID khác. Nói tóm gọi là đăng nhập sang 1 user khác ngay trên terminal đang chạy.
Sự khác biệt giữa lệnh su và lệnh su - trong Linux
1. “su – <user>”
Khi bạn sử dụng lệnh “su” + “–” để chuyển đổi session user khác thì đồng nghĩa với việc yêu cầu hệ thống Linux hãy tạo 1 session hoàn toàn mới và thay đổi toàn bộ các biến môi trường của user hiện tại sang user khác, hay còn gọi là load toàn bộ biến môi trường của user mà mình muốn chuyển session qua y hệt như bạn mở 1 session SSH hay local đăng nhập vào user đó. Bạn coi qua ví dụ 1 để hiểu thêm.
Ví dụ ở đây ta xét biến môi trường $PATH là dễ hình dung nhất.
Ví dụ 1:
[blogkdata@kdata.vn ~]$ whoami blogkdata [blogkdata@kdata.vn ~]$ pwd /home/blogkdata/ [blogkdata@kdata.vn ~]$ echo $PATH /home/blogkdata/perl5/bin:/home/blogkdata/perl5/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/easy/bin:/root/bin:/root/.local/bin:/root/bin:/bin:/usr/local/easy/bin:/usr/local/easy/bin
Thực hiện chuyển đổi sang user root với “su –“. Nếu bạn không để tên username sau lệnh su thì mặc định Linux hiểu là bạn đang muốn chuyển session sang user root.
[blogkdata@kdata.vn ~]$ sudo su - [root@kdata.vn ~]# whoami root [root@kdata.vn ~]# pwd /root/ [root@kdata.vn ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/easy/bin:/root/bin:/root/.local/bin:/root/bin:/bin
Bạn sẽ thấy là biến môi trường $PATH có sự khác nhau rõ rệt của 2 user.
2. “su <user>”
Nếu bạn sử dụng lệnh “su” mà không có dấu “–” thì session chuyển đổi sang user khác sẽ không được áp hay được thiết lập các biến môi trường được quy định của user đó, trong trường hợp này là vẫn giữ thông tin biến môi trường của user cũ. Bạn coi qua ví dụ 2:
Ta vẫn ở thư mục và session của user “blogkdata” và xét biến môi trường $PATH như cũ.
Ví dụ 2:
[blogkdata@kdata.vn ~]$ whoami blogkdata [blogkdata@kdata.vn ~]$ echo $PATH /usr/bin:/usr/sbin:/usr/local/bin:/bin:/usr/bin:/home/blogkdata/bin [blogkdata@kdata.vn ~]$ pwd /home/blogkdata
Thực hiện chuyển đổi sang user root với “su “.
[blogkdata@kdata.vn ~]$ sudo su [root@kdata.vn ~]# whoami root [root@kdata.vn ~]# pwd /root/ [root@kdata.vn ~]# echo $PATH /home/blogkdata/perl5/bin:/home/blogkdata/perl5/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/easy/bin:/root/bin:/root/.local/bin:/root/bin:/bin:/usr/local/easy/bin
Hy vọng qua 2 ví dụ trên, bạn đã hiểu rõ hơn về sự khác biệt giữa lệnh su và lệnh su - trong Linux.
Nguồn: cuongquach